function obj=sortuj_produkty(indeks_robota)
%Funkcja jako wejście otrzymuje indeks robota. Działa na zmiennej 
%globalnej roboty a dokładniej na zmiennej robot.produkty zawierającej 
%listę produktów do zebrania.
%W pierwszej fazie algorytm wyciąga konkretne pozycje z indeksów w liscie
%a nastepnie je wstępnie sortuje.
%Nastepnie wyszukiwana jest na liście pozycja która jest najblizej aktualnej 
%pozycji robota. (odległość typu Manhattan). Pozycja ta zostaje dodana jako
%pierwsza do zebrania. Nastepnie zostają wyszukane inne produkty znajdujace
%sie w tym samym korytarzu i postortowane tak aby były zbierane po kolei.
%wszystkie powyzsze kroki działają w pętli aż do opróżnienia listy
%produktów.




global roboty;
final=[];

obj=1;
%wyuskanie konkretnej pozycji w postaci tabeli z indeksów znajdujacych się
%na mapie

for (i=1:size(roboty(indeks_robota).produkty,2))
%zmienna posiadająca numer w postaci tekstowej
spozycja=num2str(roboty(indeks_robota).produkty(i));
%podział na konkretne wspolrzedne i zamiana spowrotem na liczby
pozycja(i,2)=str2num(spozycja(1:length(spozycja)-3));
pozycja(i,1)=str2num(spozycja(length(spozycja)-2:length(spozycja)));
    
end;
%wstepnie sortuje tablice produktow wedlug rzedow
pozycja=sortrows(pozycja);

%tutaj zaczynamy sortować tablice
while size(pozycja,1)>0
    
posegregowane=[];
%ustawiamy minimalna odległość na jakąś dużą wartość
min_odleglosc=100000;

for (i=1:size(pozycja,1))
 %manhattan to odległość połozenia robota od badanego punktu typu manhattan 
 manhattan=abs(roboty(indeks_robota).pozycja(1)-pozycja(i,1))+ abs(roboty(indeks_robota).pozycja(2)-pozycja(i,2));  
 
 %wyszukujemy pozycje ktora jest najblizej pozycji w 
 %ktorej znajduje sie robot
 if(manhattan<min_odleglosc)
 najblizsza(1)=pozycja(i,1) ;
 najblizsza(2)=pozycja(i,2);
 end
 min_odleglosc=min(min_odleglosc, manhattan);  
end;



%szukanie pozycji którą nalezy usunąć z tablicy 
usunac=0;
for (i=1:size(pozycja,1))
%[lista(i,1) lista(i,2)]
        if (pozycja(i,1)==najblizsza(1) & pozycja(i,2)==najblizsza(2))
        do_usuniecia=i;
        usunac=1;
      end;  
      
end;

%jesci odnaleziono wspolrzedna w tablicy to usuwamy ja
 if (usunac==1)
       pozycja(do_usuniecia,:)=[];
    usunac=0;
 end;
 


%sprawdzamy teraz czy sa przedmioty znajdujace sie w tym samym korytarzu
w_korytarzu=[];
do_usuniecia=[];
for (i=1:size(pozycja,1))

        if (pozycja(i,1)==najblizsza(1) | pozycja(i,1)==najblizsza(1)+2 |pozycja(i,1)==najblizsza(1)-2)
        w_korytarzu=[w_korytarzu;pozycja(i,:)];
        %oznaczamy dane przedmioty jako te które trzeba usunać z tabeli
        do_usuniecia=[do_usuniecia, i];
        usunac=1;
      end;     
end;
%usuwamy z tabeli wszystko co znajduje sie w korytarzu



 if (usunac==1)
     
     for (i=length(do_usuniecia):-1:1)
     pozycja(do_usuniecia(i),:)=[];
     end
    usunac=0;
 end;
     
      %dodajemy ajbliższy punkt do macierzy posegregowane
      
posegregowane=[posegregowane; najblizsza;w_korytarzu];
posegregowane=sortrows(posegregowane,[2]);
final=[final;posegregowane];
end
%koniec while


lista_indeksow=[];

for (i=1:size(final,1))
    
    if(length(num2str(final(i,1)))==1)
sfinal=[num2str(final(i,2)), '00', num2str(final(i,1))];
    end
    
        if(length(num2str(final(i,1)))==2)
sfinal=[num2str(final(i,2)), '0', num2str(final(i,1))];
        end
    
            if(length(num2str(final(i,1)))==3)
sfinal=[num2str(final(i,2)), num2str(final(i,1))];
    end
    
lista_indeksow=[lista_indeksow; str2num(sfinal)];
end;

roboty(indeks_robota).produkty=lista_indeksow';


